package com.nextel.project.cliente.rms;

import com.nextel.project.Configuracion;


import com.nextel.project.cliente.bean.ClientePorCodigoBean;
import pe.com.nextel.rms.GestorRMS;
import pe.com.nextel.rms.Persistente;
import java.util.Stack;
import pe.com.nextel.util.ArrayList;
import pe.com.nextel.util.Arrays;
import pe.com.nextel.util.List;

/**
 *
 * @author eespinoza
 */
public class RMSClientePorCodigo extends GestorRMS {

    private ClientePorCodigoBean codigoCliente = new ClientePorCodigoBean();

    public RMSClientePorCodigo() {
        super("INDXCODCLIENTE");

    }

    protected Persistente createObjectBean() {
        return codigoCliente;
    }

    public void grabarClientePorCodigo(Stack objectStack) throws Exception {
        try {
            abrirRS();

            Object obj;
            ClientePorCodigoBean bean;
            int i = 0;
            List lista = new ArrayList();
            //mientras haya datos en la pila
            while ((obj = objectStack.pop()) != null) {

                bean = (ClientePorCodigoBean) obj;
                if (i % 150 == 0 && !lista.isEmpty()) {
                    guardar(lista);
                    lista.clear();
                    System.gc();
                }
                lista.add(bean);
                i++;


            }

            if (!lista.isEmpty()) {
                guardar(lista);
                lista.clear();
                System.gc();
            }

            lista = null;

        } finally {

            cerrarRS();
        }
    }

    public ClientePorCodigoBean buscarCliente(String codigo) throws Exception {
//        System.out.println("rms.buscarCliente");
        try {
            abrirRS();
            ClientePorCodigoBean clienteReturn = null;

            ClientePorCodigoBean cliente = new ClientePorCodigoBean();


            cliente.setCodigoCliente(codigo);
//            System.out.println("Cliente= " + cliente);


            int tamanio = getNumRecords();

//            if(tamanio==0)
//            {
//                throw new Exception("Sincronizar");
//            }

            int inicio = 1;
            int fin = tamanio;
            int pos;
            boolean flag = false;
            List lista = null;
            int i = 0;

            while (inicio <= fin) {
                pos = (inicio + fin) / 2;
//                System.out.println("-->1=");
                lista = getRecordList(pos);
//                System.out.println("-->2=");

                i = Arrays.esMayorMenor(lista, cliente);
                //System.out.println("i=" + i);
                if (i >= 0) {
                    flag = true;
                    break;
                } else if (i == -2) { //es menor

                    inicio = pos + 1;
                } else if (i == -1) { // es mayor
                    fin = pos - 1;
                }
            }

            if (flag) {

                clienteReturn = (ClientePorCodigoBean) lista.get(i);
            }

            if (lista != null) {
                lista.clear();
                lista = null;
            }
            
            System.gc();

            return clienteReturn;

        } finally {
            cerrarRS();
        }
    }
}
